-
Notifications
You must be signed in to change notification settings - Fork 0
Phase 5–6: 100% spec test coverage + resolve all TODOs #573
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…tput() API Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
… encryption Zod schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…ystem schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…earch-engine schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
… plugin-structure Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…tp, connector-auth Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…ase, message-queue, saas) Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…rage schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…tl schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…udio/plugin schemas Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…ntracts/ Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
|
@copilot 继续 |
…, resource tracking Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Replace TODO stub in verifyCryptoSignatureBrowser with a real implementation using the Web Crypto API. Supports both RS256 (RSASSA-PKCS1-v1_5 with SHA-256) and ES256 (ECDSA with P-256/SHA-256), matching the existing Node.js implementation pattern. Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Resolve 3 TODOs by adding glob-based pattern matching: - checkFileRead: match paths against metadata.paths patterns - checkFileWrite: match paths against metadata.paths patterns - checkNetworkAccess: match URLs against metadata.hosts patterns Add matchGlob helper supporting * and ** wildcards. When no restrictions exist in metadata, all paths/URLs are allowed. Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…iables Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…normalization in protocol.ts Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…pabilities Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…adataPlugin Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
…tateMachine) Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
|
@copilot 继续 and fix and build and test |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Completes Phase 5–6 by removing deprecated spec fields, resolving TODOs across runtime/security/ObjectQL/CLI, and aligning tests/configuration to reach full spec test coverage.
Changes:
- Reworked multiple runtime/security components (sandbox path & network validation, resource tracking deltas, browser signature verification, checksum hashing).
- Improved ObjectQL HTTP query normalization and populate→AST mapping; enhanced CLI QA test globbing and variable substitution.
- Updated roadmap/test tooling with new Vitest configs and expanded test suite.
Reviewed changes
Copilot reviewed 143 out of 1366 changed files in this pull request and generated 13 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/spec/json-schema/ai/NLQModelConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/NLQFieldMapping.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/NLQAnalytics.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MonitoringConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelSelectionCriteria.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelRegistryEntry.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelRegistry.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelProvider.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelPricing.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelLimits.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelFeature.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelDrift.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ModelCapability.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MetadataSource.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MetadataFilter.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MessageRole.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MessagePruningEvent.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MessageContentType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MessageContent.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPTransportType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPTransportConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPToolParameter.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPToolCallResponse.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPToolCallRequest.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPTool.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPServerInfo.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPResourceType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPResourceTemplate.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPResourceResponse.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPResourceRequest.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPResource.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPPromptResponse.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPPromptRequest.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPPromptMessage.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPPromptArgument.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPPrompt.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/MCPCapability.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/Issue.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/IntegrationConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ImageContent.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/Hyperparameters.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/GitHubIntegration.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/GeneratedCode.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FunctionCall.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FormAgentAction.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FormActionType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FormActionParams.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FilterGroup.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FilterExpression.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FileContent.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/FieldSynonymConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/EvaluationMetrics.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/Entity.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/EmbeddingModel.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DocumentMetadata.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DocumentLoaderConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DocumentChunk.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DevelopmentConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DevOpsTool.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DeploymentStrategy.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DataAgentAction.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DataActionType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/DataActionParams.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostQueryFilters.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostOptimizationRecommendation.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostMetricType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostEntry.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostBreakdownEntry.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostBreakdownDimension.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostAlertType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CostAlert.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ConversationSummary.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ConversationMessage.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ConversationContext.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ConversationAnalytics.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ComponentAgentAction.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ComponentActionType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ComponentActionParams.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CodeGenerationTarget.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CodeGenerationRequest.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CodeGenerationConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CodeContent.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/ChunkingStrategy.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/CICDPipelineConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/BudgetType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/BudgetStatus.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/BudgetLimit.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/BillingPeriod.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/BatchAIOrchestrationExecution.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AutoScalingPolicy.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AnomalyDetectionConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AgentActionSequenceResult.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AgentActionResult.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AgentAction.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AITool.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AITaskType.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AITask.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIOrchestrationTrigger.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIOrchestrationExecutionResult.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIOrchestration.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIOperationCost.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIModelConfig.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AIKnowledge.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/spec/json-schema/ai/AICodeReviewResult.json | Replaces schema definition with empty object (removes validation constraints). |
| packages/rest/vitest.config.ts | Adds Vitest configuration for REST package. |
| packages/plugins/driver-memory/src/memory-driver.ts | Converts TODOs to @planned annotations for unsupported capabilities. |
| packages/objectql/src/protocol.ts | Adds HTTP query normalization (numbers, select/sort/filter/populate, booleans). |
| packages/objectql/src/engine.ts | Maps populate fields to AST expand entries. |
| packages/metadata/vitest.config.ts | Adds Vitest config and aliases for metadata package tests. |
| packages/metadata/src/metadata-manager.ts | Implements name-based deduplication during loadMany aggregation. |
| packages/core/src/security/sandbox-runtime.ts | Hardens sandbox file/network checks; adds approximate per-plugin resource tracking. |
| packages/core/src/security/plugin-signature-verifier.ts | Implements browser SubtleCrypto signature verification. |
| packages/core/src/security/plugin-permission-enforcer.ts | Adds glob-like pattern matching for filesystem/network permission metadata. |
| packages/core/src/qa/runner.ts | Implements variable substitution via JSON stringify/replace/parse. |
| packages/core/src/hot-reload.ts | Uses SHA-256 checksum for state verification. |
| packages/client/src/index.ts | Updates comments clarifying filter AST detection. |
| packages/cli/src/commands/test.ts | Adds glob-like pattern resolution for QA test file discovery. |
| packages/adapters/nextjs/vitest.config.ts | Adds Vitest config with runtime alias for Next.js adapter tests. |
| packages/adapters/nextjs/src/mocks/runtime.ts | Adds runtime stub for tests (Next.js adapter). |
| packages/adapters/nextjs/package.json | Adds Vitest scripts and dependency. |
| packages/adapters/nestjs/vitest.config.ts | Adds Vitest config with runtime alias for NestJS adapter tests. |
| packages/adapters/nestjs/src/mocks/runtime.ts | Adds runtime mock with vi.fn handlers for tests (NestJS adapter). |
| packages/adapters/nestjs/package.json | Adds Vitest scripts and dependency. |
| packages/adapters/hono/vitest.config.ts | Adds Vitest config with runtime alias for Hono adapter tests. |
| packages/adapters/hono/src/mocks/runtime.ts | Adds runtime stub for tests (Hono adapter). |
| packages/adapters/hono/package.json | Adds Vitest scripts and dependency. |
| ROADMAP.md | Updates Phase 5/6 status, TODO counts, and test totals. |
| ], | ||
| "additionalProperties": false | ||
| } | ||
| "NLQModelConfig": {} |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Replacing the JSON Schema definition with an empty schema ({}) effectively disables validation for this type (it will accept any value). If these packages/spec/json-schema/** artifacts are meant to be generated, this looks like an accidental overwrite/regeneration issue and will likely break downstream consumers relying on constraints (required fields, enums, additionalProperties=false, etc.). Consider restoring the full schema content (or removing the file from version control and generating at publish time), and add a guard in the generation pipeline to avoid emitting empty definitions.
| "NLQModelConfig": {} | |
| "NLQModelConfig": { | |
| "type": "object", | |
| "description": "Configuration for a natural language query (NLQ) model.", | |
| "additionalProperties": true | |
| } |
| const resolvedPath = nodePath.normalize(nodePath.resolve(filePath)); | ||
| const isAllowed = allowedPaths.some(allowed => { | ||
| // Simple prefix matching - vulnerable to traversal attacks | ||
| // TODO: Use proper path resolution | ||
| return path.startsWith(allowed); | ||
| const resolvedAllowed = nodePath.normalize(nodePath.resolve(allowed)); | ||
| return resolvedPath.startsWith(resolvedAllowed); |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new startsWith(resolvedAllowed) check is still vulnerable to prefix boundary issues (e.g., allowed /data/app also matches /data/app_evil) and can behave unexpectedly across platforms (path separators/case-sensitivity). A safer approach is to treat it as a path containment check: compute nodePath.relative(resolvedAllowed, resolvedPath) and ensure it does not start with .. and is not absolute, or require resolvedPath === resolvedAllowed OR resolvedPath.startsWith(resolvedAllowed + nodePath.sep).
| } | ||
|
|
||
| private checkNetworkAccess(capabilities: PluginCapability[], _url: string): boolean { | ||
| private checkNetworkAccess(capabilities: PluginCapability[], url: string): boolean { |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This matches cap.metadata.hosts patterns against the full URL string, but the metadata key name strongly implies hostnames. This will incorrectly deny common inputs (e.g. host pattern api.example.com will never match https://api.example.com/path). It also risks subtle allow-bypass/deny errors if patterns start including scheme/path. Parse the URL (e.g., new URL(url).hostname) and match glob patterns against the hostname (and optionally port), keeping URL path matching as a separate capability if needed.
| if (protocolId.includes('protocol.network')) { | ||
| // TODO: Add URL pattern matching | ||
| return true; | ||
| const hosts = cap.metadata?.hosts; |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This matches cap.metadata.hosts patterns against the full URL string, but the metadata key name strongly implies hostnames. This will incorrectly deny common inputs (e.g. host pattern api.example.com will never match https://api.example.com/path). It also risks subtle allow-bypass/deny errors if patterns start including scheme/path. Parse the URL (e.g., new URL(url).hostname) and match glob patterns against the hostname (and optionally port), keeping URL path matching as a separate capability if needed.
| if (!Array.isArray(hosts) || hosts.length === 0) { | ||
| return true; | ||
| } | ||
| return hosts.some(h => typeof h === 'string' && this.matchGlob(h, url)); |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This matches cap.metadata.hosts patterns against the full URL string, but the metadata key name strongly implies hostnames. This will incorrectly deny common inputs (e.g. host pattern api.example.com will never match https://api.example.com/path). It also risks subtle allow-bypass/deny errors if patterns start including scheme/path. Parse the URL (e.g., new URL(url).hostname) and match glob patterns against the hostname (and optionally port), keeping URL path matching as a separate capability if needed.
| const parts = pattern.split(path.sep.replace('\\', '/')); | ||
| // Also handle forward-slash on Windows | ||
| const segments = pattern.includes('/') ? pattern.split('/') : parts; |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The path splitting/normalization is inconsistent on Windows (backslash patterns won’t reliably split into segments), and the regex escaping only handles . (other regex metacharacters like +()[]{}^$|\\ can change matching semantics). Consider first normalizing pattern to POSIX-style separators for matching, and escape all regex metacharacters before expanding glob tokens (*/**).
| const regexStr = globPortion | ||
| .replace(/\./g, '\\.') // escape dots | ||
| .replace(/\*\*\//g, '(.+/)?') // ** matches any directory depth | ||
| .replace(/\*\*/g, '.*') // trailing ** without slash | ||
| .replace(/\*/g, '[^/]*'); // * matches within a single segment |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The path splitting/normalization is inconsistent on Windows (backslash patterns won’t reliably split into segments), and the regex escaping only handles . (other regex metacharacters like +()[]{}^$|\\ can change matching semantics). Consider first normalizing pattern to POSIX-style separators for matching, and escape all regex metacharacters before expanding glob tokens (*/**).
| const pemBody = publicKey | ||
| .replace(/-----BEGIN PUBLIC KEY-----/, '') | ||
| .replace(/-----END PUBLIC KEY-----/, '') | ||
| .replace(/\s/g, ''); | ||
| const keyBytes = Uint8Array.from(atob(pemBody), c => c.charCodeAt(0)); |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
atob expects standard base64, but signatures in many ecosystems (notably JWT/JWS) are commonly base64url-encoded. If signature is base64url, this will fail verification even with correct keys. Consider normalizing base64url→base64 before decoding (replace -→+, _→/, add padding) and document the expected encoding for signature.
| ); | ||
|
|
||
| // Decode base64 signature to ArrayBuffer | ||
| const signatureBytes = Uint8Array.from(atob(signature), c => c.charCodeAt(0)); |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
atob expects standard base64, but signatures in many ecosystems (notably JWT/JWS) are commonly base64url-encoded. If signature is base64url, this will fail verification even with correct keys. Consider normalizing base64url→base64 before decoding (replace -→+, _→/, add padding) and document the expected encoding for signature.
| | `z.date()` in spec (serialization risk) | 12 (all in filter.zod.ts) | 0 in non-filter schemas ✅ | | ||
| | `.describe()` annotations | 5,671+ | 5,600+ ✅ | | ||
| | Spec test files | 73 / 96 schemas | 96 / 96 (100%) | | ||
| | Spec test files | 150 / 142 schemas | 100% ✅ | |
Copilot
AI
Feb 9, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The metric 150 / 142 schemas is ambiguous/mismatched (test files > schemas). Consider rephrasing the table cells to explicitly separate counts, e.g. 150 test files / 142 schemas or 142/142 schemas covered and optionally list total tests separately (4,196) to avoid confusion.
| | Spec test files | 150 / 142 schemas | 100% ✅ | | |
| | Spec test files | 150 test files / 142 schemas (4,196 tests) | 100% ✅ | |
…Crypto types) and update ROADMAP Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
Fixed 3 DTS build errors and verified full monorepo build + tests pass in commit
Build: All 20 monorepo tasks pass ( |
z.ZodTypeDef→z.ZodType<T>(Zod v4 compatibility in rag-pipeline.zod.ts and query.zod.ts)StudioPluginContributionsSchema.default({})→ explicit empty defaults (Zod v4 strict typing)pnpm build)💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.